package com.ljy.my_study.leetcode.移动零;

import java.util.Arrays;

/** 
* @author James
* @date 2018年9月22日 
*/
public class TestMain {
//	给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
//
//	示例:
//
//	输入: [0,1,0,3,12]
//	输出: [1,3,12,0,0]
//	说明:
//
//	必须在原数组上操作，不能拷贝额外的数组。
//	尽量减少操作次数。
	
	public static void main(String[] args) {
		TestMain testMain=new TestMain();
		int[] array= {1,0,3,4,0,6,0,8};
		testMain.moveZeroes2(array);
		System.out.println(Arrays.toString(array));
	}
	
	public void moveZeroes(int[] nums) {
        for(int i=0;i<nums.length;i++) {
        	if(nums[i]==0) {
        		int a=i;
        		while((a+1)<nums.length&&nums[a+1]==0) {
        			a++;
        		}
        		a++;
        		if(a<nums.length) {
        			int temp=nums[i];
        			nums[i]=nums[a];
        			nums[a]=temp;
        		}else {
        			break;
        		}
        	}
        }
    }
	
	public void moveZeroes2(int[] nums) {
		int i=0;
		int j=0;
		int len=nums.length;
		while(j<len) {
			if(nums[j]!=0) {
				nums[i]=nums[j];
				i++;
			}
			j++;
			
		}
		for(int a=i;a<len;a++) {
			nums[a]=0;
		}
	}
}
